1 module unde.games.dizzy.omega.animations.ground_garden; 2 3 import derelict.opengl3.gl; 4 import std.conv; 5 import std.format; 6 import std.math; 7 import std.stdio; 8 import unde.games.collision_detector; 9 import unde.games.dizzy.omega.dizzy; 10 import unde.games.dizzy.omega.main; 11 import unde.games.object; 12 import unde.games.renderer; 13 import unde.global_state; 14 15 class GroundGarden:StaticGameObject 16 { 17 this(MainGameObject root) 18 { 19 frame = -1; 20 models["ground-garden"] = root.models["ground-garden"]; 21 models["ground-garden-1"] = root.models["ground-garden-1"]; 22 models["ground-garden-2"] = root.models["ground-garden-2"]; 23 models["ground-garden-3"] = root.models["ground-garden-3"]; 24 25 super(root); 26 } 27 28 override void draw(GlobalState gs) 29 { 30 DizzyOmega dz = cast(DizzyOmega) root; 31 32 if (abs(root.scrx - 330.0) > 35.0 || root.scry != 0) 33 return; 34 35 glPushMatrix(); 36 if (frame < 0) 37 { 38 recursive_render(gs, models["ground-garden"]); 39 } 40 else 41 { 42 float f = root.frame - frame; 43 if (f < 100.0) 44 { 45 recursive_render(gs, models["ground-garden"]); 46 } 47 else if (f < 200.0) 48 { 49 recursive_render(gs, models["ground-garden-1"]); 50 } 51 else if (f < 300.0) 52 { 53 recursive_render(gs, models["ground-garden-2"]); 54 } 55 else 56 { 57 recursive_render(gs, models["ground-garden-3"]); 58 } 59 } 60 glPopMatrix(); 61 } 62 63 override bool tick(GlobalState gs) 64 { 65 DizzyOmega dz = cast(DizzyOmega) root; 66 67 if (frame >= 0 && root.frame - frame == 300) 68 { 69 dz.collision_objects["solid"]["GroundGarden"] = null; 70 dz.collision_objects["solid"].remove("GroundGarden"); 71 reset_collision_cache(); 72 } 73 74 return true; 75 } 76 77 override void load(string[string] s) 78 { 79 string p = "groundgarden"; 80 if (p in s) 81 frame = s[p].to!(long); 82 else 83 frame = -1; 84 85 DizzyOmega dz = cast(DizzyOmega) root; 86 if (frame < 0 || root.frame - frame < 300) 87 { 88 dz.collision_objects["solid"]["GroundGarden"] = 89 dz.collision_objects["temp-solid"]["GroundGarden"]; 90 reset_collision_cache(); 91 } 92 else 93 { 94 dz.collision_objects["solid"]["GroundGarden"] = null; 95 dz.collision_objects["solid"].remove("GroundGarden"); 96 reset_collision_cache(); 97 } 98 } 99 100 override void save(ref string[string] s) 101 { 102 if (frame >= 0) 103 { 104 string p = "groundgarden"; 105 s[p] = frame.to!(string); 106 } 107 } 108 }